package com.binjiang.pengfuhao.服务对象;

import com.alibaba.fastjson.JSONObject;
import com.binjiang.pengfuhao.pojo.getJSON;
import com.binjiang.pengfuhao.pojo.文件对象;
import com.fasterxml.jackson.databind.util.JSONPObject;
import jdk.nashorn.internal.runtime.JSONFunctions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.multipart.MultipartFile;
import redis.clients.jedis.Jedis;

import java.io.*;

import static javax.script.ScriptEngine.FILENAME;


public class 接收切片 {
    @Autowired
    private Jedis jedis;
    @Autowired
    private getJSON getJSON;


    public String 单片写入(文件对象 file) throws IOException {
        File file1 ;
        String key= String.valueOf(file.getName().hashCode());//使用时不要忘记加上用户名
        String hash= String.valueOf(file.getName().hashCode());
        long index=0;


        MultipartFile meFile =file.getFile();// MultipartFile 这个类可以方便的获取前端传过来的文件
        file1=new File("C:\\Users\\xiaoqingfeng\\IdeaProjects\\pengfuhao\\src\\main\\resources\\templates\\"+file.getName());
        //System.out.println(file.getName());
        //filel获取文件，没有就创建

        if (!file1.exists()&&file.get切片序列()==0)//文件是否已经创建且文件是第一个保证文件的顺须
        {
            //System.out.println(file.get切片序列());
            meFile.transferTo(file1);//如果没有就创建
                jedis.ping();

                jedis.set(key,"0");

                getJSON.set上传是否成功(1);
                getJSON.setIndex(file.get切片序列());

        }else if(jedis.exists(key)&&file.get切片序列()!=(Integer.parseInt(jedis.get(key))+1)){//已经创建且序列不对，返回断点
            getJSON.set上传是否成功(0);
            getJSON.setIndex((long) Integer.parseInt(jedis.get(key)));

        }
        else if(jedis.exists(key)&&file.get切片序列()==(Integer.parseInt(jedis.get(key))+1)){//如果已经创建就合并
            RandomAccessFile raf = new RandomAccessFile(file1,"rw");
            // RandomAccessFile类所提供的发方法可以动态的操作文件，
            //这里创建一个可以操作不完整文件的对象


            raf.seek(file.get切片序列()*file.get切片长度());//seek（int n）从n处处理
            byte[] bytes = meFile.getBytes();//提区文件的字节数组
//            InputStream inputStream = meFile.getInputStream();
//            BufferedInputStream in=new BufferedInputStream(inputStream);
//           int len;
//          while(  (len=in.read())!=-1 ) { //len就是得出的字节了。
//              raf.write(len);//上面的seek方法已经把指针放在这里从这直接写入
//          }但是一个字节一个字节写入实在是太慢，此方法抛弃
           raf.write(bytes);//采用直接写入字节数组

             String value= String.valueOf(file.get切片序列());
            //System.out.println(value);
            jedis.set(key,value);

            raf.close();//写入后关闭
            jedis.close();//关闭链接，不知道是否会对性能产生影响

            getJSON.set上传是否成功(1);
            getJSON.setIndex(file.get切片序列());
        }
        String json= JSONObject.toJSONString(getJSON);
        System.out.println(file.get切片序列()+" "+ Integer.parseInt(jedis.get(key)));
        return json;
    }
}

